/* @Author: Benny Vermonden c1025695
*/

package core.logic.dataAccess;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JOptionPane;

import core.logic.services.utilServices.ConnectionService;
import core.models.dataModels.createModels.ToevoegenPersoneelModel;
import core.models.domainModel.Persoon;

public class PersoonDAO {

	public static int AddPersoon(Persoon persoon){
		String sql = "INSERT INTO Persoon(Naam, Voornaam, AdresId, Geboortedatum) VALUES (?, ?, ?, ?)";
		int ok = 0;
	
		try{
			
			Connection con = ConnectionService.getConnection();
			PreparedStatement pst = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
			pst.setString(1, persoon.getNaam());
			pst.setString(2, persoon.getVoornaam());
			pst.setInt(3, persoon.getAdres().get_adresId());
			pst.setString(4, persoon.getGeboortedatum());
			ok = pst.executeUpdate();
			
			ResultSet rs = pst.getGeneratedKeys(); //ophalen van de gegenereerde id
			rs.next();
			persoon.setPersoonId(rs.getInt(1));
			ok = persoon.getPersoonId(); // added door Y.Laenen [C1011950] nodig om een passagier te koppelen aan deze persoon.
		}
		catch(SQLException ex){
			
		}
		return ok;
	}
	//Geeft de persoonId terug van een persoon die al bestaat in de database	
	//Gebruikt voor validatie bestaande Persoon zodat deze niet twee maal voorkomt in de database	
	//Lieven Drijkoningen c1017178
	public static int getPersoonId(ToevoegenPersoneelModel model)
	{	
		int persoonId = 0;
		String sql = "SELECT * FROM Persoon p WHERE p.Naam = ? AND p.Voornaam = ? ";
		ResultSet res;
		try
		{
			PreparedStatement pst = ConnectionService.getConnection().prepareStatement(sql);
			pst.setString(1, model.get_naam());
			pst.setString(2, model.get_voornaam());
			
			res = pst.executeQuery();
			while(res.next())
			{
				persoonId = res.getInt("PersoonId");
			}
		}
		catch(SQLException ex)
		{
			JOptionPane.showMessageDialog(null, ex.getMessage());
		}
		return persoonId;
		
	}
	
	//Toevogen van persoon, met adres id
	//Lieven Drijkoningen
	public static int insertPersoon(ToevoegenPersoneelModel model)
	{		
		int id = 0;
		ResultSet key;
		String sql = "INSERT INTO Persoon VALUES (?,?,?,?)";
		try
		{
			PreparedStatement pst = ConnectionService.getConnection().prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);
			pst.setString(1, model.get_naam());
			pst.setString(2, model.get_voornaam());
			pst.setInt(3,model.getAdresId());
			pst.setString(4, model.get_geboorteDatum());
			
			pst.executeUpdate();
			key = pst.getGeneratedKeys();
			while(key.next())
			{
				id = key.getInt(1);				
			}					
		}
		catch(SQLException ex)
		{
			JOptionPane.showMessageDialog(null, ex.getStackTrace());
			ex.printStackTrace();
		}
		return id;
	}
	
	//@Author: Wijnen David [c1026300] 2013-11-30 
	//-------------------------------------------
	public static Persoon getPersoonById(int persoonid)
	{
		Persoon gevondenPersoon = null;
		String sql = "SELECT * FROM Persoon WHERE PersoonId = ?";
		try
		{
			PreparedStatement pst = ConnectionService.getConnection().prepareStatement(sql)	;
			pst.setInt(1, persoonid);
			ResultSet rs = pst.executeQuery();
			
			while(rs.next())
			{
				int id = rs.getInt("PersoonId");
				int adresId = rs.getInt("AdresId");
				String naam = rs.getString("Naam");
				String voornaam = rs.getString("Voornaam");
				String geboortedDatum = rs.getString("Geboortedatum");
				
				gevondenPersoon = new Persoon(id, naam, voornaam);
				gevondenPersoon.setAdres(AdresDAO.getAdresByAdresId(adresId));
				gevondenPersoon.setPersoonNationaliteiten(Persoon_NationaliteitDAO.getPersoonNationaliteiten(id));
				gevondenPersoon.setGeboortedatum(geboortedDatum);
			}
		}
		catch(SQLException ex)
		{
			JOptionPane.showMessageDialog(null, ex.getMessage());
			ex.printStackTrace();
		}
		return gevondenPersoon;		
	}
	
	//Lieven DRijkoningen 
	//Ophalen van persoonsgegevens samen met id van zijn adres
	public static Persoon getPersoonAdres(Persoon p)
	{
		String sql = "SELECT * FROM Persoon WHERE PersoonId = ?";
		try
		{
			PreparedStatement pst = ConnectionService.getConnection().prepareStatement(sql);
			pst.setInt(1, p.getPersoonId());
			ResultSet rs = pst.executeQuery();
			while(rs.next())
			{				
				p.setNaam(rs.getString("Naam"));
				p.setVoornaam(rs.getString("Voornaam"));
				p.getAdres().set_adresId(rs.getInt("AdresId"));
				p.setGeboortedatum(rs.getString("Geboortedatum"));
			}					
		}
		catch(SQLException ex)
		{
			JOptionPane.showMessageDialog(null, ex.getMessage());
		}
		return p;
		
	}
	
	//Y.laenen  update Persoon, verlengde van update passagier
	public static int updatePersoon(Persoon p)
	{
		int result=0;
		
		String sql = "UPDATE persoon " 
					 + "SET Naam= ?, "
					 + "Voornaam= ?, "
					 + "Geboortedatum= ? "
					 + "WHERE PersoonId= ?;";
		try
		{
			PreparedStatement pst = ConnectionService.getConnection().prepareStatement(sql);
			pst.setString(1, p.getNaam());
			pst.setString(2, p.getVoornaam());
			pst.setString(3, p.getGeboortedatum());
			pst.setInt(4, p.getPersoonId());
			
			result = pst.executeUpdate();

		}
		catch(SQLException ex)
		{
			JOptionPane.showMessageDialog(null, ex.getMessage());
		}
		return result;
		
	}
}
